package map;

import java.util.HashMap;
import java.util.Map;

/**
 * java.utll.Map 查找表
 * Map是Java集合框架的一员
 * 但是map 不是集合
 * 并没有实现Collection接口
 * map体现的结构是一个多行两列的表格
 * 其中左列称为可
 * 右列称为value
 * map总是根据key提取时间的value
 * map要求key不允许重复（不能有equals比较为true的两个key童世仔map中存在）
 *
 * map是一个接口 常用实现类：
 * java.util.HashMap:散列表 使用散列算法实现map
 * java.util.TreeMap:使用二叉树算法实现map
 */
public class MapDemo {
    public static void main(String[] args) {
        Map<String,Integer> map = new HashMap<>();
        /**
         * V put(K k,V v)
         * 将一组键值对存入map中
         * 返回值为被替换的value：由于map不允许重复的key，因此如果使用重复的key存储
         * 则是将存入的value替换原有的value并将被替换的value返回 否则返回值为null
         */
        /**
         * “语文”map中不存在因此没有替换value
         */
        Integer value = map.put("语文",99);
        System.out.println(value); // null
        map.put("数学",98);
        map.put("英语",97);
        map.put("物理",96);
        map.put("化学",95);
        System.out.println(map);

        /**
         * 替换map中“英语”的值
         */
        value = map.put("英语",55);
        System.out.println(map);
        /**
         * "英语"原来对应的值 97
         */
        System.out.println(value);

        /**
         * V get(K k)
         * 根据给定的key获取对应的value
         * 如果给定的key在map中不存在则返回值为null
         */
        value = map.get("语文");
        System.out.println("语文:"+value);
        value = map.get("体育");
        System.out.println("体育:"+value);

        /**
         * inr size();
         * 获取map中的元素个数
         * 一组键值对为一个元素
         */
        int size = map.size();
        System.out.println("size:"+size);

        /**
         * boolean containsKey(Object key)
         * 判断当前map是否含有给定的key
         * boolean containsKey(Object value)
         * 判断当前map是否含有给定的value
         */
        boolean ck = map.containsKey("语文");
        boolean cv = map.containsKey(99);
        System.out.println("是否包含给定的key:"+ck);
        System.out.println("是否包含给定的value:"+cv);

        /**
         * V remove(Object key)
         * 根据给定的key删除对应的这组键值对
         * 返回值为这个key对应的value
         */
        value = map.remove("语文");
        System.out.println(map);
        System.out.println(value);
    }
}
